/**
 * <p>Title: SignatureSvc</p>
 * <p>Description: The Interface of Authority Svc</p>
 * <p>Copyright: Baosight Software LTD.co Copyright (c) 2016</p>
 * <p>Company: Baosight Software</p>
 * @author Zuo Yefeng
 * @version 1.0
 * <pre>Histroy:
 *       2016-9-30  Zuo Yefeng  Create
 *       2016-10-26 Zuo Yefeng  增加 getAllSignatureMeanings, getSignatureMeaningById 方法
 *</pre>
*/

package cn.jhg.account.service;

import java.util.List;

import org.bson.Document;

import cn.jhg.account.entity.SignatureDefinition;
import cn.jhg.account.util.ServiceResult;

/**
 * 签名定义管理接口
 * @author Yefeng
 * @version 1.0
 * @created 30-9月-2016 16:25:33
 */
public interface SignatureSvc {
	/**
	 * 新增签名定义
	 * @param sigdef	签名定义
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @param iuid	调用者 id
	 * @return	错误代码
	 */
	public ServiceResult<Integer> addSignatureDefinition(SignatureDefinition sigdef, int sid, int iuid);
	// 将签名定义写入数据库(t_ibcp_signature_definition 表)
	// 添加审计追踪记录
	// option 字段按位表示签名选项
	//   bit 0 - 是否必须写批注
	//   bit 1 - 是否必须由已登录用户签名

	/**
	 * 查询签名定义
	 * @param sid	签名定义 id
	 * @param iuid	调用者 id
	 * @return	错误代码，签名定义
	 */
	public ServiceResult<SignatureDefinition> querySignatureDefinition(int sdid, int iuid);
	// 从数据库中返回符合条件的签名定义

	/**
	 * 删除签名定义
	 * @param sid	签名定义 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @param iuid	调用者 id
	 * @return	错误代码
	 */
	public ServiceResult<Object> deleteSignatureDefinition(int sdid, int sid, int iuid);
	// 从数据库中删除签名定义
	// 添加审计追踪记录
	
	/**
	 * 确认签名
	 * @param sid	签名定义 id
	 * @param uid	签名人 id
	 * @param iuid	调用者 id
	 * @param metadata	签名记录元数据
	 * @return	错误代码
	 */
	public ServiceResult<Integer> signConfirmation(int sdid, String account, String password, Document metadata,int iuid);
	// 添加确认签名的审计追踪项（ 调用 AuditTrialSvc::addRecord）
	/* Metadata of signature
	{
	    sdid: <int>,       // 签名定义 id
	    comment: <string>  // 签名备注
	}
	*/
	
	/**
	 * 获取所有的签名含义 id
	 * @return ErrorCode, 签名含义 id set
	 */
	public ServiceResult<List<Integer>> getAllSignatureMeanings();
	// 从 t_ibcp_signature_meaning 表中获取所有签名含义 id
	
	/**
	 * 根据 id 获取签名含义
	 * @param id	签名含义  id
	 * @return ErrorCode, 签名含义
	 */
	public ServiceResult<String> getSignatureMeaningById(int id);
	/**
	 * 确认签名
	 * @param sid	签名定义 id
	 * @param uid	签名人 id
	 * @param iuid	调用者 id
	 * @param metadata	签名记录元数据
	 * @return	错误代码
	 */
	public ServiceResult<Integer> signConfirmation(int sdid, String account, String password,String signaccount,String signpwd,Document metadata,int iuid);
}
